package com.woniuxy.goods.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.woniuxy.goods.dto.AttrConfigDto;
import com.woniuxy.goods.dto.AttrInfoDto;
import com.woniuxy.goods.entity.AttributeConfig;
import com.woniuxy.goods.param.AddAttrConfigParam;
import com.woniuxy.goods.param.UpdateAttrConfigParam;

import java.util.List;

/**
 * <p>
 *  服务类
 * </p>
 * 属性组、属性绑定服务层接口
 * @author ...
 * @since 2024年05月25日
 */
public interface AttributeConfigService extends IService<AttributeConfig> {
    /**
     * 新增属性组、属性绑定
     * @param param 新增属性组属性配置对象
     * @return 属性组属性配置dto对象集合
     * @throws Exception
     */
    List<AttrConfigDto> addAttrConfig(AddAttrConfigParam param) throws Exception;

    /**
     * 删除属性组、属性绑定
     * @param id 属性组属性绑定信息id
     * @return
     * @throws Exception
     */
    void delAttrConfig(Integer id);

    /**
     * 通过属性组id删除属性组、属性绑定
     * @param groupId 属性组id
     * @return
     * @throws Exception
     */
    void delConfigByGroupId(Integer groupId);

    /**
     * 通过属性id删除属性组、属性绑定
     * @param attributeId 属性id
     * @return
     * @throws Exception
     */
    void delConfigByAttrId(Integer attributeId);

    /**
     * 通过id修改属性组、属性绑定
     * @param param 修改属性组属性配置对象
     * @return 属性组属性配置dto对象
     * @throws Exception
     */
    AttrConfigDto updateAttrConfigById(UpdateAttrConfigParam param) throws Exception;

    /**
     * 通过属性组id修改绑定属性
     * @param param 新增属性组属性配置对象
     * @return 属性组属性配置dto对象集合
     * @throws Exception
     */
    List<AttrConfigDto> updateConfigByGroupId(AddAttrConfigParam param) throws Exception;

    /**
     * 通过id查找属性组、属性绑定
     * @param id 属性组属性绑定信息id
     * @return 属性组属性配置dto对象
     * @throws Exception
     */
    AttrConfigDto findAttrConfigById(Integer id) throws Exception;

    /**
     * 通过属性组id查找属性组、属性绑定
     * @param groupId 属性组id
     * @return 属性组属性绑定信息集合
     * @throws Exception
     */
    List<AttrConfigDto> findConfigByGroupId(Integer groupId) throws Exception;

    /**
     * 通过属性id查找属性组、属性绑定
     * @param attributeId 属性id
     * @return 属性组属性绑定信息集合
     * @throws Exception
     */
    List<AttrConfigDto> findConfigByAttrId(Integer attributeId) throws Exception;

    /**
     * 通过属性组类别id查找属性组、属性绑定
     * @param id 属性组类别id
     * @return 属性信息集合
     * @throws Exception
     */
    List<AttrInfoDto> findConfigById(Integer id) throws Exception;
}
